﻿using System;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using Engine;

namespace MyControls
{
    /// <summary>
    /// User's component tương ứng với một câu hỏi trong game treo khỉ
    /// </summary>
    public partial class KhiCom : UserControl
    {
        #region Properties

        private bool _capture0 = true;//Xác định xem có cần capture ảnh từ ricData không
        private bool _capture1 = true;//Xác định xem có cần capture ảnh từ ricData1 không

        private string _cap = string.Empty;
        /// <summary>
        /// Thứ tự của phần tử để hiển thị ra ngoài
        /// </summary>
        public string Cap
        {
            set
            {
                _cap = value;
                lblIndex.Text = _cap;
            }
            get { return _cap; }
        }

        private int _level = 0;
        /// <summary>
        /// Level của phần tử: 0 ~ dễ; 1: trung bình; 2: khó
        /// </summary>
        public int Level
        {
            set { _level = value; }
            get { return _level; }
        }

        private string _fileName0 = string.Empty;
        /// <summary>
        /// Tên file ảnh để lưu vào file xml
        /// </summary>
        public string FileName0
        {
            set { _fileName0 = value; }
            get { return _fileName0; }
        }

        private string _fileName1 = string.Empty;
        /// <summary>
        /// Tên file ảnh để lưu vào file xml
        /// </summary>
        public string FileName1
        {
            set { _fileName1 = value; }
            get { return _fileName1; }
        }

        private string _fullPath0 = string.Empty;
        /// <summary>
        /// Đường dẫn file ảnh trên local để đưa lên server
        /// </summary>
        public string FullPath0
        {
            set { _fullPath0 = value; }
            get { return _fullPath0; }
        }

        private string _fullPath1 = string.Empty;
        /// <summary>
        /// Đường dẫn file ảnh trên local để đưa lên server
        /// </summary>
        public string FullPath1
        {
            set { _fullPath1 = value; }
            get { return _fullPath1; }
        }

        private bool _modify = true;
        /// <summary>
        /// Trạng thái của phần tử
        /// Căn cứ vào đây để biết có cần tải lại ảnh hay không
        /// </summary>
        public bool Modify
        {
            set { _modify = value; }
            get { return _modify; }
        }

        private Image _image0 = null;
        /// <summary>
        /// Ảnh để hiện ra trong trường hợp xem lại đề đã có
        /// </summary>
        public Image Image0
        {
            set { _image0 = value; }
            get { return _image0; }
        }

        private Image _image1 = null;
        /// <summary>
        /// Ảnh để hiện ra trong trường hợp xem lại đề đã có
        /// </summary>
        public Image Image1
        {
            set { _image1 = value; }
            get { return _image1; }
        }

        #endregion

        #region Constructor
        public KhiCom()
        {
            InitializeComponent();
            picData.Visible = !(rtxtData.Visible = true);
            picData1.Visible = !(rtxtData1.Visible = true);
            rtxtData.Focus();
        }
        public KhiCom(int level, string fileName0, Image image0, string fileName1, Image image1)
        {
            InitializeComponent();
            bool _exists0 = (string.Empty != fileName0) & (image0 != null);
            bool _exists1 = (string.Empty != fileName1) & (image1 != null);

            SetProperties(level, fileName0, image0, FullPath0, fileName1, image1, FullPath1, !(_exists0 && _exists1));
            #region Show
            rtxtData.Visible = !(picData.Visible = _exists0);
            if (_exists0)
            {
                picData.Image = Image0;
            }
            if (_exists1)
            {
                picData1.Image = Image1;
            }
            _capture0 = cmdBrowse.Visible = !(cmdEdit.Visible = _exists0);
            _capture1 = cmdBrowse1.Visible = !(cmdEdit1.Visible = _exists1);
            #endregion
        }
        #endregion

        #region Methos
        private void SetProperties(int level, string fileName0, Image image0, string fullPath0, string fileName1, Image image1, string fullPath1, bool modify)
        {
            Level = level;
            FileName0 = fileName0;
            Image0 = image0;
            FullPath0 = fullPath0;
            FileName1 = fileName1;
            Image1 = image1;
            FullPath1 = fullPath1;
            Modify = modify;
        }

        /// <summary>
        /// Capture image from richtextbox
        /// </summary>
        public void MyCapture(int _class)
        {
            if (_capture0)
            {
                FileName0 = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss:fffffff").Replace("/", string.Empty).Replace(":", string.Empty).Replace(" ", string.Empty);
                FileName0 += ".png";
                // Bo het dau xuong dong
                string stringText = rtxtData.Text.Replace("\n", string.Empty);
                stringText = stringText.Trim();
                if (stringText.CompareTo("") == 0)
                {
                    CEngine.CreateImageFromEquations(ref rtxtData, FileName0, false);
                }
                // Nguoc lai neu khong phai la so binh thuong
                else
                {
                    CEngine.CreateImageFromText(rtxtData.Text, FileName0, _class);
                }
                SetProperties(Level, FileName0, Image.FromFile(Environment.CurrentDirectory + @"\" + FileName0), Environment.CurrentDirectory + @"\" + FileName0,
                    FileName1, Image1, FullPath1
                    ,true);
            }

            if (_capture1)
            {
                FileName1 = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss:fffffff").Replace("/", string.Empty).Replace(":", string.Empty).Replace(" ", string.Empty);
                FileName1 += ".png";
                // Bo het dau xuong dong
                string stringText = rtxtData.Text.Replace("\n", string.Empty);
                stringText = stringText.Trim();
                if (stringText.CompareTo("") == 0)
                {
                    CEngine.CreateImageFromEquations(ref rtxtData1, FileName1, false);
                }
                // Nguoc lai neu khong phai la so binh thuong
                else
                {
                    CEngine.CreateImageFromText(rtxtData1.Text, FileName1, _class);
                }
                SetProperties(Level, FileName0, Image0, FullPath0,
                    FileName1, Image.FromFile(Environment.CurrentDirectory + @"\" + FileName1), Environment.CurrentDirectory + @"\" + FileName1,
                    true);
            }
        }
        #endregion

        #region Events
        private void cmdBrowse_Click(object sender, EventArgs e)
        {
            OpenFileDialog _openFileDialog = new OpenFileDialog();
            _openFileDialog.Filter = "Image PNG|*.png|Image Jpeg|*.jpg|Image Bitmap|*.bmp|All Images|*.png;*.jpg;*.jpeg;*.bmp";
            _openFileDialog.RestoreDirectory = true;
            _openFileDialog.Title = "Select one image file!";
            if (_openFileDialog.ShowDialog() == DialogResult.OK)
            {
                System.Drawing.Image tmp = Image.FromFile(Path.GetFullPath(_openFileDialog.FileName));
                if (tmp.Size.Width > picData.Size.Width || tmp.Size.Height > picData.Height)
                {
                    MessageBox.Show(
                        "Ảnh quá lớn! Vui lòng chọn ảnh kích thước nhỏ hơn hoặc bằng " + picData.Size.Width + "x" +
                        picData.Size.Height, "Thong bao", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                _capture0 = false;

                FileName0 = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss:fffffff").Replace("/", string.Empty).Replace(":", string.Empty).Replace(" ", string.Empty);
                FileName0 += ".png";
                SetProperties(Level, FileName0, Image.FromFile(Path.GetFullPath(_openFileDialog.FileName)), Path.GetFullPath(_openFileDialog.FileName),
                    FileName1, Image1, FullPath1,
                    true);
                picData.Image = Image.FromFile(Path.GetFullPath(_openFileDialog.FileName));
                cmdBrowse.Visible = rtxtData.Visible = false;
                picData.Visible = cmdEdit.Visible = true;
            }
        }

        private void cmdBrowse1_Click(object sender, EventArgs e)
        {
            OpenFileDialog _openFileDialog = new OpenFileDialog();
            _openFileDialog.Filter = "Image PNG|*.png|Image Jpeg|*.jpg|Image Bitmap|*.bmp|All Images|*.png;*.jpg;*.jpeg;*.bmp";
            _openFileDialog.RestoreDirectory = true;
            _openFileDialog.Title = "Select one image file!";
            if (_openFileDialog.ShowDialog() == DialogResult.OK)
            {
                System.Drawing.Image tmp = Image.FromFile(Path.GetFullPath(_openFileDialog.FileName));
                if (tmp.Size.Width > picData1.Size.Width || tmp.Size.Height > picData1.Height)
                {
                    MessageBox.Show(
                        "Ảnh quá lớn! Vui lòng chọn ảnh kích thước nhỏ hơn hoặc bằng " + picData.Size.Width + "x" +
                        picData.Size.Height, "Thong bao", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                _capture1 = false;

                FileName1 = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss:fffffff").Replace("/", string.Empty).Replace(":", string.Empty).Replace(" ", string.Empty);
                FileName1 += ".png";
                SetProperties(Level, FileName0, Image0, FullPath0,
                    FileName1, Image.FromFile(Path.GetFullPath(_openFileDialog.FileName)), Path.GetFullPath(_openFileDialog.FileName),
                    true);
                picData1.Image = Image.FromFile(Path.GetFullPath(_openFileDialog.FileName));
                cmdBrowse1.Visible = rtxtData1.Visible = false;
                picData1.Visible = cmdEdit1.Visible = true;
            }
        }

        private void cmdEdit_Click(object sender, EventArgs e)
        {
            DialogResult dialogResult = MessageBox.Show("Nếu chấp nhận sửa bạn sẽ phải nhập lại nội dung.\nBạn có chắc muốn sửa?", "Xac nhan sua", MessageBoxButtons.YesNo,
                                                        MessageBoxIcon.Question);
            if (dialogResult == DialogResult.Yes)
            {
                _capture0 = true;
                SetProperties(Level, string.Empty, null, string.Empty,
                    FileName1, Image1, FullPath1, 
                    true);
                cmdBrowse.Visible = rtxtData.Visible = true;
                picData.Visible = cmdEdit.Visible = false;
                rtxtData.Focus();
            }
        }

        private void cmdEdit1_Click(object sender, EventArgs e)
        {
            DialogResult dialogResult = MessageBox.Show("Nếu chấp nhận sửa bạn sẽ phải nhập lại nội dung.\nBạn có chắc muốn sửa?", "Xac nhan sua", MessageBoxButtons.YesNo,
                                                        MessageBoxIcon.Question);
            if (dialogResult == DialogResult.Yes)
            {
                _capture1 = true;
                SetProperties(Level, FileName0, Image0, FullPath0,
                    string.Empty, null, string.Empty,
                    true);
                cmdBrowse1.Visible = rtxtData1.Visible = true;
                picData1.Visible = cmdEdit1.Visible = false;
                rtxtData1.Focus();
            }
        }
        #endregion
    }
}
